查看原文
其他

pc端微信逆向分析

2017-09-14 合天智汇

最近有朋友问我libcef如何注入js,然后又谈到微信用了libcef云云。


捣腾了一下午,知道怎么注入js后,发现朋友是需要auto control ui


瞬间崩溃。。。。


诚然微信有些浏览器功能用到了cef,但是主界面是duilib写的


跟cef没毛关系,(libcef封装到qbcore.dll里面,想注入js需要hook libcef的导出函数,拿到browser,替换callback……)


话题回到pc端微信怎么auto control ui,以及如何拿到”控件“上面的信息


下面为原理截图,看不懂请参考duilib源码。


CWindowWnd 指针可以通过GetWindowLongPtr获取




CWindowWnd指针 == WindowImplBase指针

然后通过

static_cast<INotifyUI *>(pWinImplBase)

转换得到INotifyUI指针,再通过虚函数地址表就能找到Notify指针


最后替换Notify指针就能监控到所有duilib事件了



事件结构体,pSender是事件的触发者,我们后面通过获取root节点就能得到所有CControlUI


这个结构我们可以伪造出来,然后直接调用原始Notify回调就能模拟界面操作了



每一个xml创建CControlUI 树的时候,都会调用CDialogBuilder::Create


我们通过hook这个函数,返回就能得到root节点



这里是duilib的container节点原理,如果父亲是一个容器节点,就把自己添加到父亲里面



得到节点树之后,我们需要枚举所有节点


看看这些虚函数是不是很可爱,很方便,有没有想到com技术



这个虚函数更可爱,哈哈



可爱到我不需要判断数量,只需要判断结果是否为NULL就能知道是否枚举结束。



原理图都贴了,最好自己看看duilib源码,pc端微信界面是duilib写的,基本的虚函数偏移没有变化,说明腾讯没有大改动duilib(添加虚函数)。


当然,我发现有些结构被改动过,这里就不提了。关于duilib的消息流动,自己可以好好看看源码。


以下为部分代码,自行完成完整版


最后来一张效果图


本文由看雪论坛 tongzeyu 原创


别忘了投稿哟!!!

合天公众号开启原创投稿啦!!!

大家有好的技术原创文章。

欢迎投稿至邮箱:edu@heetian.com

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哟。

有才能的你快来投稿吧!


合天网安实验室

网址 : www.hetianlab.com

电话:4006-123-731

长按图片,据说只有颜值高的人才能识别哦!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存